package com.itkjb.leisurely.resource.sys.model;



import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.itkjb.leisurely.core.base.BaseModelWithOperationFields;
import com.itkjb.leisurely.core.interfaces.TierInterface;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * Copyright (C), 2018-2020
 *
 * @Author: lix
 * @Date: 2020-05-27 13:12
 * @Description: 系统菜单资源目录
 * @Version: V1.0.0
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("sys_menu")
@ApiModel(value="SysMenuModel模型", description="系统菜单资源目录")
public class SysMenuModel extends BaseModelWithOperationFields implements TierInterface {

    private static final long serialVersionUID = 3607958522761209358L;

    private String id;

    /**
     * 菜单名字
     */
    @NotNull(message = "名称不能为空")
    @ApiModelProperty(value = "菜单名字 ")
    private String title;

    /**
     * 菜单编码，解决前后端分离时为组成名称
     */
    @ApiModelProperty(value = "菜单编码，前后端分离时为组成名称")
    @NotNull(message = "编码不能为空")
    private String code;

    /**
     * 菜单url
     */
    @ApiModelProperty(value = "菜单url")
    private String path;


    /**
     * 子节点数目
     */
    @JsonProperty(access = JsonProperty.Access.READ_ONLY)
    @ApiModelProperty(value = "子节点数目")
    @TableField("`sub_count`")
    private Integer subCount;

    @ApiModelProperty(value = "是否含有子节点")
    @TableField(exist = false)
    @JsonProperty(access = JsonProperty.Access.READ_ONLY)
    private  boolean hasChildren;

    public boolean isHasChildren(){
        return  (this.getSubCount() !=null && this.getSubCount()>0 )?true: false ;
    }
    /**
     * 父级id
     */
    @ApiModelProperty(value = "父级id ")
    private String parentId;

    /**
     * 图标样式
     */
    @ApiModelProperty(value = "图标样式 ")
    private String icon;

    /**
     * 上传图标路径
     */
    @ApiModelProperty(value = "上传图标路径")
    private String imgPath;

    /**
     * 权限代码，尽可能保证唯一性
     */
    @ApiModelProperty(value = "权限代码，尽可能保证唯一性")
    private String permission;

    /**
     * 类型   1：目录   2：菜单   4：按钮
     */
    @ApiModelProperty(value = "类型   1：目录   2：菜单   4：按钮",example = "2")
    private Integer menuType;

    /**
     * 菜单适配类型(0：PC端 1：移动端 )
     */
    @ApiModelProperty(value = "菜单适配类型(0：PC端 1：移动端 )",example = "0")
    private Integer menuAdap;

    /**
     * 是否是外接系统,0:内网资源，1是外接资源，外链资源
     */
    @ApiModelProperty(value = "是否是外接系统,0:内网资源，1是外接资源，外链资源",example = "0")
    private Integer isOutside;

    /**
     * web端打开方式，1：新页面(新窗口)打开  2:当前页面框架中打开  ，默认新窗口打开
     */
    @ApiModelProperty(value = "web端打开方式，1：新页面(新窗口)打开  2:当前页面框架中打开 ，默认新窗口打开",example = "1")
    private Integer openType;

    /**
     * 系统编号
     */
    @ApiModelProperty(value = "系统编号 ")
    private String sysCode;

    /**
     * 状态  0：禁用 ，1： 可用
     */
    @ApiModelProperty(value = "状态  0：禁用 ，1： 可用")
    private Integer status;

    /**
     * 系统id
     */
    @ApiModelProperty(value = "系统id")
    private String topId;

    /**
     * 排序
     */
    @ApiModelProperty(value = "排序 ",example = "0")
    private Integer paixu;

    /**
     * 部门id
     */
    @ApiModelProperty(value = "部门id")
    private String depId;

    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    private String remark;

    /**
     * 乐观锁版本号
     */
    @ApiModelProperty(value = "乐观锁版本号",example = "0")
    private Long lockVersion;


    // 不在数据库字段，仅为了查询
    /**
     * 要查询 的ids
     */
    @JsonIgnore
    private transient List<String> ids;

    /**
     * 要查询的 父类ids
     */
    @JsonIgnore
    private transient List<String> parentIds;






}
